package com.photography.controller;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.photography.annotation.RequireRole;
import com.photography.common.Result;
import com.photography.entity.Product;
import com.photography.exception.ErrorCode;
import com.photography.service.ProductService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/product")
public class ProductController {
    @Resource
    private ProductService productService;

    /**
     * 根据ID查询产品
     *
     * @param productId 产品ID
     * @return 产品信息
     */
    @GetMapping("/searchId/{productId}")
    public Result findById(@PathVariable Integer productId) {
    return productService.findProductById(productId);
    }

    /**
     * 添加产品
     *
     * @param product 产品信息
     * @return 添加结果
     */
    @RequireRole("manager")
    @PostMapping("/add")
    public Result add(@RequestBody Product product) {
        System.out.println("productName=" + product.getProductName());
        return productService.addProduct(product);
    }

    /**
     * 删除产品
     *
     * @param productId 产品ID
     * @return 删除结果
     */
    @RequireRole("manager")
    @DeleteMapping("/delete/{productId}")
    public Result delete(@PathVariable Integer productId) {
        return productService.deleteProduct(productId);
    }

    /**
     * 更新产品信息
     * @param product 产品信息
     * @return 结果
     */
    @RequireRole("manager")
    @PutMapping("/update")
    public Result updateProduct(@RequestBody Product product){
        return productService.updateProduct(product);
    }

    /**
     * 模糊搜索产品
     *
     * @param current 当前页码
     * @param size    每页大小
     * @param keyword 搜索关键词，支持产品名称、英文名称、描述、适用场景、标签的模糊匹配
     * @return 分页结果
     */
    @GetMapping("/search")
    public Result search(@RequestParam(defaultValue = "1") Integer current,
                         @RequestParam(defaultValue = "10") Integer size,
                         @RequestParam(required = false) String keyword) {
        // 创建分页对象
        Page<Product> page = new Page<>(current, size);
        // 执行分页查询
        Page<Product> productPage = productService.search(page, keyword);
        return Result.success(productPage, "搜索成功");
    }


    /**
     * 分页查询产品列表
     *
     * @param current 当前页码
     * @param size    每页大小
     * @param price   价格（可选）
     * @param category    分类（可选）
     * @param search 搜索关键词，支持产品名称、英文名称、描述、适用场景、标签的模糊匹配
     * @return 分页结果
     */
    @RequireRole("manager")
    @GetMapping("/list")
    public Result list(@RequestParam(defaultValue = "1") Integer current,
                       @RequestParam(defaultValue = "10") Integer size,
                       @RequestParam(required = false) String price,
                       @RequestParam(required = false) String category,
                       @RequestParam(required = false) String search) {
        // 创建分页对象
        Page<Product> page = new Page<>(current, size);
        // 执行分页查询
        Page<Product> productPage = productService.getProductPage(page, price, category,search);
        return Result.success(productPage, "查询成功");
    }

}
